package container

type Supplier func() interface{}

/**
 * A simple instance container, only hold singleton instance, not DI framework.
 */
type Container interface {
	RegisterSingletonInstance(name string, supplier Supplier) bool
	/**
	 * @param
	 *	string: name @link InstanceNames.go
	 *	interface{}: instance pointer
	 * @return
	 *   如果 name 已经存在, 或者 instance 为 nil 或不是 pointer 方法将返回 false,
	 */
	RegisterInstance(name string, scope SCOPE, supplier Supplier) bool

	/**
	 * @param
	 * 	string: name @link InstanceNames.go
	 */
	UnRegisterInstance(string)

	/**
	 * @param
	 * 	string: name @link InstanceNames.go
	 * @return
	 *  返回name对应的interface，类型为pointer。如果name不存在，返回nil
	 */
	GetInstance(string) interface{}

	/**
	 * @return
	 *  返回容器中所有的name列表
	 */
	GetAllInstanceNames() []string

	GetContainerName() string
}
